package main

import (
	"fmt"
	"time"
)

func main() {
	//sync.RWMutex{}
	//当涉及到多go程时，c语言使用互斥量上锁来保持资源同步，避免资源竞争问题
	//go语言也支持这种方式，但是go语言更好的解决方案是使用管道、通道
	//使用通道不需要我们去进行加解锁
	//A往通道里写数据，B从管道里面读数据，go自动给我们做好了数据同步

	//创建管道
	//strChan := make(chan string)
	//numChan := make(chan int) //装数字的管道，无缓冲通道
	numChan := make(chan int, 10)

	go func() {
		for i := 0; i < 50; i++ {
			data := <-numChan
			fmt.Println("read data: ", data)
		}
	}()

	go func() {
		for i := 0; i < 20; i++ {
			numChan <- i
			fmt.Println("this is sub write chanel: write data: ", i)
		}
	}()

	for i := 20; i < 50; i++ {
		//向管道中写入数据
		numChan <- i
		fmt.Println("this is main chanel,写入数据: ", i)
	}

	time.Sleep(5 * time.Second)
}
